package by2021;

/**
 *
 * 给你一个整数 x ，如果 x 是一个回文整数，返回 true ；否则，返回 false 。
 *
 * 回文数是指正序（从左向右）和倒序（从右向左）读都是一样的整数。例如，121 是回文，而 123 不是。
 *
 *
 * tips：
 *      1. 如果是0结尾肯定不是回文数。
 *      2. 如果是0直接返回true。
 *      3. 负数一定不是回文数。
 *
 * @author : Carry
 * @date : 2021-09-22 16:42
 **/
public class 回文数 {

    public static void main(String[] args) {
        boolean palindromePlan2 = isPalindromePlan2(121);
        System.out.println(palindromePlan2);
    }

    /**
     *  使用取余的方式取到反转的数字
     */
    public static boolean isPalindromePlan2(int x) {

        if (x < 0 || (x % 10 == 0 && x != 0)) {
            return false;
        }

        int reverse = 0;

        while (x > reverse) {
            reverse = reverse * 10 + x % 10;
            x = x / 10;
        }

        return reverse == x || x == reverse / 10;
    }

    /**
     *  转换成字符串，然后一一对比
     */
    public boolean isPalindromePlan1(int x) {

        if (x < 0 || (x % 10 == 0 && x != 0)) {
            return false;
        }

        byte[] bytes = String.valueOf(x).getBytes();
        int size = bytes.length;

        for (int i = 0; i < size; i++) {

            if (i * 2 > size) {
                return true;
            }

            if (bytes[i] != bytes[size - i - 1]) {
                return false;
            }
        }

        return true;
    }
}
